#ifndef TIMELINECHART_H
#define TIMELINECHART_H

#include <QFrame>
#include <QPainter>
#include <QVBoxLayout>
#include <QPushButton>
#include <QList>
#include <QTimer>
#include <QTime>
#include <QWidget>
#include <QScrollArea>

struct TimelineEvent {
    QString time;         // 时间
    QString description;  // 描述
    QString remaining;    // 剩余时间
};


class Timeline : public QFrame
{
    Q_OBJECT
public:
    explicit Timeline(QWidget *parent = nullptr);
    // 添加事件
    void addEvent(const QString &time, const QString &description, const QString &remaining);
    QSize sizeHint() const override;
    // 设置每个事件的间距
    void setEventSpacing(int spacing);
    // 设置顶部间距
    void setTopMargin(int margin);
    // 清空所有事件
    void clearEvents();
protected:
    void paintEvent(QPaintEvent *event) override;
private:
    // 更新控件大小
    void updateSize();
private:
    QList<TimelineEvent> events; // 时间轴事件列表
    int eventSpacing;            // 每个事件间隔
    int topMargin;               // 顶部间距
};




class TimelineChart : public QWidget
{
    Q_OBJECT
public:
    explicit TimelineChart(QWidget *parent = nullptr);
    virtual ~TimelineChart();

public:
    // 配置滚动区域的显示策略
    void configureScrollArea();

    // 设置窗口尺寸
    void setWindowSize(int width, int height);

    // 清除所有事件
    void clearEvents();

    // 添加一个事件
    void addEvent(const QString& event);

    // 批量添加事件
    void addEvents(const QVector<QString>& events);

    // 获取当前的时间轴控件
    Timeline *getTimeline() const;

    // 设置倒计时时间，单位为毫秒
    void setCountdown(int milliseconds);

    void setStartTime();
    // 设置滚动区域的显示策略
    void setScrollAreaPolicy(Qt::ScrollBarPolicy horizontalPolicy, Qt::ScrollBarPolicy verticalPolicy);

private:
    // 事件添加的内部实现，接受 TimelineEvent 类型
    void addEvent(const TimelineEvent& event);

    // 批量添加事件，接受 TimelineEvent 类型
    void addEvents(const QVector<TimelineEvent>& events);

    // 初始化布局
    void initializeLayout();

    // 计算剩余时间
    QString calculateRemainingTime();

private:
    Timeline *m_pTimeline;      // 时间轴控件
    QScrollArea *scrollArea;    // 滚动区域
    QTimer *m_pTimer;           // 用于倒计时的定时器
    int m_countdown;            // 倒计时的毫秒数
    QDateTime m_startTime;      // 开始时间，用于倒计时计算
};

#endif // TIMELINECHART_H
